package es.wtestgen.services;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Transaction;
import org.hibernate.classic.Session;
import org.hibernate.criterion.Restrictions;

import es.wtestgen.domain.Alumno;
import es.wtestgen.domain.Asignatura;
import es.wtestgen.domain.Profesor;
import es.wtestgen.util.HibernateUtil;

public class ProfesorDAO {
	
	private static final Log log = LogFactory.getLog(ProfesorDAO.class);
	
	public ProfesorDAO(){
		
	}
	
	
	public boolean eliminar(int codProf){
		Transaction tx = null;
		Session session = HibernateUtil.currentSession();
		boolean eliminado = false;
		try{			
			tx = session.beginTransaction();
			Profesor profesor = (Profesor)session.get(Profesor.class, codProf);
			
			session.delete(profesor);
			tx.commit();
			eliminado = true;
		}catch(Exception e){
			try{
				tx.rollback();
				e.printStackTrace();
			}catch(Exception e2){
				e2.printStackTrace();				
			}
		}finally{
				HibernateUtil.closeSession();
		}
		return eliminado;
	}
	
	
		
	public List findAll(){
		List lista = new ArrayList();
		Criteria criteria = null;
		
		try{
			Session session = HibernateUtil.currentSession();
			criteria = session.createCriteria(Profesor.class);				
			lista = criteria.list();		
		}catch(HibernateException e){
			log.error("_____Error al obtener la todos los registros de la clase Profesor",e);
			throw new HibernateException(e);						
		}	
		return lista;
	}
	
	
	public List findById(String cod){
		List lista = new ArrayList();
		Criteria criteria = null;
		int id = Integer.parseInt(cod);
		
		try{
			Session session = HibernateUtil.currentSession();
			criteria = session.createCriteria(Profesor.class);				
			criteria.add(Restrictions.eq("codProf", id));
			lista = criteria.list();		
		}catch(HibernateException e){
			log.error("_____Error al obtener el registro de la clase Profesor con id: " + cod,e);
			throw new HibernateException(e);						
		}	
		return lista;
	}
	
	public List findByDni(String dni){
		List lista = new ArrayList();
		Criteria criteria = null;
		
		try{
			Session session = HibernateUtil.currentSession();
			criteria = session.createCriteria(Profesor.class);				
			criteria.add(Restrictions.eq("dni", dni));
			lista = criteria.list();		
		}catch(HibernateException e){
			log.error("_____Error al obtener el registro de la clase Profesor con dni: " + dni,e);
			throw new HibernateException(e);						
		}	
		return lista;	
	}
	
	
	public List findByNombreUsua(String nombreUsua){
		List lista = new ArrayList();
		Criteria criteria = null;
		
		try{
			Session session = HibernateUtil.currentSession();
			criteria = session.createCriteria(Profesor.class);				
			criteria.add(Restrictions.eq("nombreUsua", nombreUsua));
			lista = criteria.list();		
		}catch(HibernateException e){
			log.error("_____Error al obtener el registro de la clase Profesor con nombre de usuario: " + nombreUsua,e);
			throw new HibernateException(e);						
		}	
		return lista;
	}
	
	
	public boolean guardar(Profesor profesor){
		Transaction tx = null;
		Session session = HibernateUtil.currentSession();
		boolean guardado = false;
		try{			
			tx = session.beginTransaction();
			session.clear();
			//session.flush();			
			
			if(profesor.getCodProf() != -1){
				Profesor prof = (Profesor)session.get(Profesor.class, profesor.getCodProf());
				
				
				prof.setApellidos(profesor.getApellidos());
				prof.setDni(profesor.getDni());
				prof.setEmail(profesor.getEmail());
				prof.setNombre(profesor.getNombre());
				prof.setTelefono(profesor.getTelefono());
				prof.setNombreUsua(profesor.getNombreUsua());
				prof.setPwdUsua(profesor.getPwdUsua());				
				
				session.update(prof);				
				tx.commit();
				
				
			}else{
				session.save(profesor);				
				tx.commit();
			}
			
			guardado = true;
		}catch(Exception e){
			try{
				tx.rollback();
				e.printStackTrace();
			}catch(Exception e2){
				e2.printStackTrace();				
			}
		}finally{
				HibernateUtil.closeSession();
		}
		return guardado;
	}
	
	

}
